package spring.chatroom.java_chatroom.common.utils;

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Base64;
import java.io.IOException;
import java.util.UUID;

public class Base64Util {

//    public static void main(String[] args) {
//        String base64String = ""; // 你的Base64字符串
//        try {
//            // 1. 解析Base64字符串并保存文件
//            String savedFilePath = saveBase64ToFile(base64String, "F:\\chat_files\\head_portrait");
//            System.out.println("文件已保存至: " + savedFilePath);
//
//            // 2. 获取文件MIME类型
//            String mimeType = extractMimeType(base64String);
//            System.out.println("文件MIME类型: " + mimeType);
//        } catch (IOException e) {
//            System.err.println("文件保存失败: " + e.getMessage());
//        } catch (IllegalArgumentException e) {
//            System.err.println("无效的Base64格式: " + e.getMessage());
//        }
//    }

    /**
     * 将Base64字符串保存为文件
     *
     * @param base64Data    完整的Base64字符串（包含MIME类型）
     * @param saveDirectory 保存文件的目录路径
     * @return 保存的文件路径
     */
//  
    public static String saveBase64ToFile(String base64Data, String saveDirectory) throws IOException {
        // 1. 分离MIME类型和Base64数据
        String[] parts = base64Data.split(",");
        if (parts.length < 2) {
            throw new IllegalArgumentException("无效的Base64格式 - 缺少逗号分隔符");
        }

        String mimeInfo = parts[0];
        String base64Image = parts[1];

        // 2. 提取MIME类型
        String mimeType = extractMimeType(mimeInfo);

        // 3. 确定文件扩展名
        String fileExtension = getFileExtensionFromMimeType(mimeType);

        // 4. 生成唯一文件名
        String fileName = UUID.randomUUID().toString() + "." + fileExtension;

        Path filePath = Paths.get(saveDirectory, fileName);

        // 5. 解码Base64数据
        byte[] decodedBytes = Base64.getDecoder().decode(base64Image);

        // 6. 写入文件
        Files.write(filePath, decodedBytes);

        return fileName;
    }

    /**
     * 从Base64头部信息提取MIME类型
     */
    public static String extractMimeType(String mimeInfo) {
        if (!mimeInfo.contains(":")) {
            throw new IllegalArgumentException("无效的MIME信息格式");
        }

        String[] mimeParts = mimeInfo.split(";")[0].split(":");
        if (mimeParts.length < 2) {
            throw new IllegalArgumentException("无法解析MIME类型");
        }

        return mimeParts[1];
    }

    /**
     * 根据MIME类型获取文件扩展名
     */
    private static String getFileExtensionFromMimeType(String mimeType) {
        switch (mimeType.toLowerCase()) {
            case "image/jpeg":
            case "image/jpg":
                return "jpg";
            case "image/png":
                return "png";
            case "image/gif":
                return "gif";
            case "application/pdf":
                return "pdf";
            case "application/msword":
                return "doc";
            case "application/vnd.openxmlformats-officedocument.wordprocessingml.document":
                return "docx";
            // 添加更多MIME类型支持...
            default:
                return "bin"; // 未知类型使用二进制扩展名
        }
    }
}